package com.tn.dao.usermanagement;

import com.tn.controller.alarm.common.model.user.entity.Menu;
import com.tn.controller.alarm.common.model.user.vo.UserVO;
import com.tn.controller.alarm.common.model.user.entity.DeptDO;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * 人员管理Dao
 *
 * @program: tn_aucy_java
 * @author: yangjiayao
 * @create: 2021/12/24
 */
@Repository
public interface IUserManagementDao {
    /**
     * 新增部门
     *
     * @param dept 部门信息
     * @return 结果
     */
    int addDept(@Param("dept") DeptDO dept);

    /**
     * 校验是否存在同名部门
     *
     * @param deptName 部门名称
     * @return 结果
     */
    int checkExistsDept(@Param("deptName") String deptName);

    /**
     * 删除部门
     *
     * @param id 部门ID
     * @return 结果
     */
    int deleteDept(@Param("id") int id);

    /**
     * 查询部门下的用户
     *
     * @param deptId 部门ID
     * @return 部门下的用户
     */
    int queryUserByDept(@Param("deptId") int deptId);

    /**
     * 修改部门
     *
     * @param dept 部门信息
     * @return 结果
     */
    int modifyDept(@Param("dept") DeptDO dept);

    /**
     * 分页查询部门信息-总数
     *
     * @param dept 查询条件
     * @return 总数
     */
    int queryDeptCount(@Param("dept") DeptDO dept);

    /**
     * 分页查询部门信息-数据
     *
     * @param startIndex 开始索引
     * @param pageSize   页长
     * @param dept       查询条件
     * @return 数据
     */
    List<DeptDO> queryDeptByPage(@Param("startIndex") Integer startIndex, @Param("pageSize") Integer pageSize,
                                 @Param("dept") DeptDO dept);

    /**
     * 新增用户
     *
     * @param user 用户信息
     * @return 结果
     */
    int addUser(@Param("user") UserVO user);

    /**
     * 校验是否存在同名用户
     *
     * @param userName 用户名
     * @param exceptId 不在校验范围内的用户ID（即自己本身）
     * @return 结果
     */
    int checkExistsUser(@Param("userName") String userName, @Param("exceptId") Integer exceptId);

    /**
     * 删除用户
     *
     * @param id 用户ID
     * @return 结果
     */
    int deleteUser(@Param("id") int id);

    /**
     * 修改用户
     *
     * @param user 用户信息
     * @return 结果
     */
    int modifyUser(@Param("user") UserVO user);

    /**
     * 分页查询用户信息-总数
     *
     * @param user 查询条件
     * @return 总数
     */
    int queryUserCount(@Param("user") UserVO user);

    /**
     * 分页查询用户信息-数据
     *
     * @param startIndex 开始索引
     * @param pageSize   页长
     * @param user       查询条件
     * @return 数据
     */
    List<UserVO> queryUserByPage(@Param("startIndex") Integer startIndex, @Param("pageSize") Integer pageSize,
                                 @Param("user") UserVO user);

    /**
     * 校验是否管理员
     *
     * @param id 用户名
     * @return 是否管理员
     */
    int checkSuperUser(@Param("id") Integer id);

    /**
     * 添加管理员权限
     *
     * @param id 用户ID
     * @return 结果
     */
    int modifySuperUser(@Param("id") Integer id, @Param("isSuperUser") Integer isSuperUser);


    void deleteMenu(Long id);

    Integer selectMenuBind(Long id);

    void editMenu(Menu menu);

    void addMenu(Menu menu);

    Integer isSuperAdmin(Long id);


    List<Menu> selectMenuByUserId(Long id);


    List<Menu> selectAllMenu();


    void deleteUserMenu(Long userId);


    void addMenuUser(@Param("userId") Long userId, @Param("menuIds") List<Long> menuIds);
}
